home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagg_m.zip / MEMORY.SWG / 0036_DOS Memory.pas < prev    next >
Pascal/Delphi Source File  |  1994-01-27  |  3KB  |  69 lines

  1. {
  2. Here a small piece of code to determine the DOS memory (that
  3. would be available at the DOS prompt) from within a TP program. It
  4. doesn't account for UMB and heap limited programs (the $M directive).
  5. It returns (almost) the value chkdsk and mem return for largest
  6. available block of dos memory.
  7. }
  8.  
  9. FUNCTION Dosmem : LONGINT;
  10.  
  11. {----Returns Largest Free DOS memory as seen on the dos prompt by          }
  12. {    CHKDSK and MEM.                                                       }
  13.  
  14. {----Records from The Programmer's PC Sourcebook by Thom Hogan, 1st Edition}
  15.  
  16. {    Only relevant field commented. Tuned by be equal to DR-DOS's 6.0}
  17. {    MEM command. Works only if programs allocates all memory available}
  18. {    so no max heaplimits to enable TP's Exec.}
  19.  
  20. Type
  21.   MCBrec = RECORD
  22.              location   : Char; {----'M' is normal block, 'Z' is last block }
  23.              ProcessID,
  24.              allocation : WORD; {----Number of 16 Bytes paragraphs allocated}
  25.              reserved   : ARRAY[1..11] OF Byte;
  26.            END;
  27.  
  28.   PSPrec = RECORD
  29.              int20h,
  30.              EndofMem        : WORD;
  31.              Reserved1       : BYTE;
  32.              Dosdispatcher   : ARRAY[1..5] OF BYTE;
  33.              Int22h,
  34.              Int23h,
  35.              INT24h          : POINTER;
  36.              ParentPSP       : WORD;
  37.              HandleTable     : ARRAY[1..20] OF BYTE;
  38.              EnvSeg          : WORD; {----Segment of Environment}
  39.              Reserved2       : LONGINT;
  40.              HandleTableSize : WORD;
  41.              HandleTableAddr : POINTER;
  42.              Reserved3       : ARRAY[1..23] OF BYTE;
  43.              Int21           : WORD;
  44.              RetFar          : BYTE;
  45.              Reserved4       : ARRAY[1..9] OF BYTE;
  46.              DefFCB1         : ARRAY[1..36] OF BYTE;
  47.              DefFCB2         : ARRAY[1..20] OF BYTE;
  48.              Cmdlength       : BYTE;
  49.              Cmdline         : ARRAY[1..127] OF BYTE;
  50.            END;
  51.  
  52. Var
  53.   pmcb   : ^MCBrec;
  54.   emcb   : ^MCBrec;
  55.   psp    : ^PSPrec;
  56.   dmem   : LONGINT;
  57.  
  58. Begin
  59.    psp:=PTR(PrefixSeg,0);      {----PSP given by TP var                }
  60.   pmcb:=Ptr(PrefixSeg-1,0);    {----Programs MCB 1 paragraph before PSP}
  61.   emcb:=Ptr(psp^.envseg-1,0);  {----Environment MCB 1 paragraph before
  62.                                     envseg                             }
  63.   dosmem:=LONGINT(pmcb^.allocation+emcb^.allocation+1)*16;
  64. End; {of DOSmem}
  65.  
  66. Begin
  67.   Writeln(Dosmem,' Bytes available.');
  68. End.
  69.